package com.thefinestartist.wip;

/**
 * Created by TheFinestArtist on 2/9/16.
 */
public class BitmapUtil {

//        private final static String TAG = ImageUtils.class.getSimpleName();
//
//        private static final String ERROR_URI_NULL = "Uri cannot be null";
//
//        /***
//         * Scales the image depending upon the display density of the device. Maintains image aspect
//         * ratio.
//         *
//         * When dealing with the bitmaps of bigger size, this method must be called from a non-UI
//         * thread.
//         * ***/
//        public static Bitmap scaleDownBitmap(Context ctx, Bitmap source, int newHeight) {
//            final float densityMultiplier = Utils.getDensityMultiplier(ctx);
//
//            // Log.v( TAG, "#scaleDownBitmap Original w: " + source.getWidth() + " h: " +
//            // source.getHeight() );
//
//            int h = (int) (newHeight * densityMultiplier);
//            int w = (int) (h * source.getWidth() / ((double) source.getHeight()));
//
//            // Log.v( TAG, "#scaleDownBitmap Computed w: " + w + " h: " + h );
//
//            Bitmap photo = Bitmap.createScaledBitmap(source, w, h, true);
//
//            // Log.v( TAG, "#scaleDownBitmap Final w: " + w + " h: " + h );
//
//            return photo;
//        }
//
//        /***
//         * Scales the image independently of the screen density of the device. Maintains image aspect
//         * ratio.
//         *
//         * When dealing with the bitmaps of bigger size, this method must be called from a non-UI
//         * thread.
//         * ***/
//        public static Bitmap scaleBitmap(Context ctx, Bitmap source, int newHeight) {
//
//            // Log.v( TAG, "#scaleDownBitmap Original w: " + source.getWidth() + " h: " +
//            // source.getHeight() );
//
//            int w = (int) (newHeight * source.getWidth() / ((double) source.getHeight()));
//
//            // Log.v( TAG, "#scaleDownBitmap Computed w: " + w + " h: " + newHeight );
//
//            Bitmap photo = Bitmap.createScaledBitmap(source, w, newHeight, true);
//
//            // Log.v( TAG, "#scaleDownBitmap Final w: " + w + " h: " + newHeight );
//
//            return photo;
//        }
//
//        /***
//         * Scales the image independently of the screen density of the device. Maintains image aspect
//         * ratio.
//         *
//         * @param uri
//         *            Uri of the source bitmap
//         ****/
//        public static Bitmap scaleDownBitmap(Context ctx, Uri uri, int newHeight) throws FileNotFoundException, IOException {
//            Bitmap original = Media.getBitmap(ctx.getContentResolver(), uri);
//            return scaleBitmap(ctx, original, newHeight);
//        }
//
//        /***
//         * Scales the image independently of the screen density of the device. Maintains image aspect
//         * ratio.
//         *
//         * @param uri
//         *            Uri of the source bitmap
//         ****/
//        public static Uri scaleDownBitmapForUri(Context ctx, Uri uri, int newHeight) throws FileNotFoundException, IOException {
//
//            if (uri == null)
//                throw new NullPointerException(ERROR_URI_NULL);
//
//            if (!isMediaContentUri(uri))
//                return null;
//
//            Bitmap original = Media.getBitmap(ctx.getContentResolver(), uri);
//            Bitmap bmp = scaleBitmap(ctx, original, newHeight);
//
//            Uri destUri = null;
//            String uriStr = Utils.writeImageToMedia(ctx, bmp, "", "");
//
//            if (uriStr != null) {
//                destUri = Uri.parse(uriStr);
//            }
//
//            return destUri;
//        }
//
//        /***
//         * Gets the orientation of the image pointed to by the parameter uri
//         *
//         * @return Image orientation value corresponding to <code>ExifInterface.ORIENTATION_*</code> <br/>
//         *         Returns -1 if the row for the {@link android.net.Uri} is not found.
//         ****/
//        public static int getOrientation(Context context, Uri uri) {
//
//            int invalidOrientation = -1;
//            if (uri == null) {
//                throw new NullPointerException(ERROR_URI_NULL);
//            }
//
//            if (!isMediaContentUri(uri)) {
//                return invalidOrientation;
//            }
//
//            String filePath = Utils.getImagePathForUri(context, uri);
//            ExifInterface exif = null;
//
//            try {
//                exif = new ExifInterface(filePath);
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//
//            int orientation = invalidOrientation;
//            if (exif != null) {
//                orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, invalidOrientation);
//            }
//
//            return orientation;
//        }
//
//        /***
//         * @deprecated Use {@link MediaUtils#isMediaContentUri(android.net.Uri)} instead. <br/>
//         *             Checks if the parameter {@link android.net.Uri} is a
//         *             {@link android.provider.MediaStore.Audio.Media} content uri.
//         ****/
//        public static boolean isMediaContentUri(Uri uri) {
//            if (!uri.toString().contains("content://media/")) {
//                Log.w(TAG, "#isContentUri The uri is not a media content uri");
//                return false;
//            } else {
//                return true;
//            }
//        }
//
//        /***
//         * Rotate the image at the specified uri. For the rotation of the image the
//         * {@link android.media.ExifInterface} data in the image will be used.
//         *
//         * @param uri
//         *            Uri of the image to be rotated.
//         ****/
//        public static Uri rotateImage(Context context, Uri uri) throws FileNotFoundException, IOException {
//            // rotate the image
//            if (uri == null) {
//                throw new NullPointerException(ERROR_URI_NULL);
//            }
//
//            if (!isMediaContentUri(uri)) {
//                return null;
//            }
//
//            int invalidOrientation = -1;
//            byte[] data = Utils.getMediaData(context, uri);
//
//            int orientation = getOrientation(context, uri);
//
//            Uri newUri = null;
//
//            try {
//
//                Log.d(TAG, "#rotateImage Exif orientation: " + orientation);
//
//                if (orientation != invalidOrientation) {
//                    Matrix matrix = new Matrix();
//
//                    switch (orientation) {
//                        case ExifInterface.ORIENTATION_ROTATE_90:
//                            matrix.postRotate(90);
//                            break;
//                        case ExifInterface.ORIENTATION_ROTATE_180:
//                            matrix.postRotate(180);
//                            break;
//                        case ExifInterface.ORIENTATION_ROTATE_270:
//                            matrix.postRotate(270);
//                            break;
//                    }
//
//                    // set some options so the memory is manager properly
//                    BitmapFactory.Options options = new BitmapFactory.Options();
//                    // options.inPreferredConfig = Bitmap.Config.RGB_565; // try to enable this if
//                    // OutOfMem issue still persists
//                    options.inPurgeable = true;
//                    options.inInputShareable = true;
//
//                    Bitmap original = BitmapFactory.decodeByteArray(data, 0, data.length, options);
//                    Bitmap rotatedBitmap = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true); // rotating
//                    // bitmap
//                    String newUrl = Media.insertImage(((Activity) context).getContentResolver(), rotatedBitmap, "", "");
//
//                    if (newUrl != null) {
//                        newUri = Uri.parse(newUrl);
//                    }
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//
//            return newUri;
//        }
}
